
/*
 * Copyright 2016 Yonyou Auto Information Technology（Shanghai） Co., Ltd. All Rights Reserved.
 *
 * This software is published under the terms of the YONYOU Software
 * License version 1.0, a copy of which has been included with this
 * distribution in the LICENSE.txt file.
 *
 * @Project Name : marketing-wechat-open-api
 *
 * @File name : MaintainServiceInterFace.java
 *
 * @Author : Wang HuiCheng
 *
 * @Date : 2016年11月3日
 *
 ----------------------------------------------------------------------------------
 *     Date             Who              Version     Comments
 * 1.  2016年11月3日    Wang HuiCheng    1.0
 *
 *
 *
 *
 ----------------------------------------------------------------------------------
 */

package com.yonyou.gmcc.gateway.wechat.service.interfaces;

import java.util.List;
import java.util.Map;

import org.marketing.common.dto.maintain.AdviserDto;
import org.marketing.common.dto.maintain.CarModelDto;
import org.marketing.common.dto.maintain.InsuranceDto;
import org.marketing.common.dto.maintain.MaintainDealerDto;
import org.marketing.common.dto.maintain.MaintainDto;
import org.marketing.common.dto.maintain.SosHelpDealerInfoDto;
import org.marketing.common.dto.maintain.SosHelpDto;
import org.marketing.common.dto.maintenanceorder.MaintenanceDto;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * 养修预约Service
 * 
 * @author Wang HuiCheng
 * @date 2016年11月3日
 */
@FeignClient(name = "service-maintain")
public interface MaintainServiceInterFace {

    /**
     * 保存预约信息
     * 
     * @author Wang HuiCheng
     * @date 2016年11月3日
     * @return 保存状态
     */
    @RequestMapping(value = "/maintain/api/v1/saveMaintain", method = RequestMethod.POST)
    @ResponseBody
    public Map<String, Object> saveMaintain(@RequestBody MaintainDto maintainDto);

    /**
    * 更新养修预约状态
    * @author Administrator
    * TODO description
    * @date 2016年12月30日
    * @param maintainDto
    * @return
    */
    @RequestMapping(value = "/maintain/api/v1/updateMaintainStatus", method = RequestMethod.POST)
    @ResponseBody
    public Map<String, Object> updateMaintainAppointStatus(@RequestBody MaintainDto maintainDto);

    /**
    * 更新一键救援状态
    * @author QianKun
    * @date 2016年12月30日
    * @param sosHelpDto
    * @return
    */
    @RequestMapping(value = "/maintain/api/v1/updateSosHelpStatus", method = RequestMethod.POST)
    @ResponseBody
    public Map<String, Object> updateSosHelpStatus(@RequestBody SosHelpDto sosHelpDto);

    /**
     * 根据微信ID取得该账号下所有的车辆信息
     *
     * @author WangHuicheng
     * @date 2016年11月4日
     * @return
     */
    @RequestMapping(value = "/maintain/api/v1/getBindCarInfos", method = RequestMethod.GET)
    public List<CarModelDto> getBindCarInfos(@RequestParam("openId")String openId);

    /**
     * 根据经销商代码取得该经销商下所有的服务人员
     * 
     * @author WangHuicheng
     * @date 2016年11月8日
     * @param dealerCode
     * @return
     */
    @RequestMapping(value = { "/maintain/api/v1/getDealerAdvisers/{dealerCode}" }, method = RequestMethod.GET, produces = "application/json;charset=UTF-8")
    public List<AdviserDto> getDealerAdvisers(@PathVariable("dealerCode") String dealerCode);

    /**
     * 取得保险公司信息
     * 
     * @author WangHuicheng
     * @date 2016年11月11日
     * @return
     */
    @RequestMapping(value = { "/maintain/api/v1/getInsuranceList" }, method = RequestMethod.GET, produces = "application/json;charset=UTF-8")
    @ResponseBody
    public List<InsuranceDto> getInsuranceList();
    
    /**
     * 给经销商发送救援信息
     * 
     * @author WangHuicheng
     * @date 2016年11月11日
     * @return
     */
    @RequestMapping(value = { "/maintain/api/v1/sendSos" }, method = RequestMethod.POST, produces = "application/json;charset=UTF-8")
    @ResponseBody
    public Map<String,Object> sendSos(@RequestBody SosHelpDto sosHelpDto);


    /**
    *
    * @author QianKun
    * 养修预约列表查询
    * @date 2016年11月17日
    * @param userId
    * @return
    */
    @RequestMapping(value = { "/maintain/api/v1/repairs" },method = RequestMethod.GET)
    public List<MaintainDto> getMaintainData(@RequestParam("userId") Long userId);

    /**
    *
    * @author QianKun
    * 养修预约详情查询
    * @date 2016年11月17日
    * @param resnId
    * @return
    */
    @RequestMapping(value = { "/maintain/api/v1/repairs/{id}" }, method = RequestMethod.GET)
    public List<MaintainDto> getMaintainDataById(@PathVariable(value="id") Long resnId);

    /**
    *
    * @author QianKun
    * 一鍵救援列表查詢
    * @date 2016年11月18日
    * @return
    */
    @RequestMapping(value = { "/maintain/api/v1/rescues" },method = RequestMethod.GET)
    public List<SosHelpDto> getSosHelpData(@RequestParam("carOwnerUserId") String carOwnerUserId);
    
    /**
    *
    * @author QianKun
    * 一鍵救援详情查询
    * @date 2016年11月18日
    * @return
    */
    @RequestMapping(value = { "/maintain/api/v1/rescues/{id}" }, method = RequestMethod.GET)
    public List<SosHelpDto> getSosHelpDataById(@PathVariable(value="id") String soshelpId);
    
    /**
     * 
    * 查询空余时间
    * @author WangHuicheng
    * @date 2016年12月21日
    * @param dealerCode
    * @param appDay
    * @return
     */
    @RequestMapping(value = { "/maintain/api/v1/simple" }, method = RequestMethod.GET)
    public List<String> getFreeTimeNoWorkStation(@RequestParam("dealerCode") String dealerCode,
                                                 @RequestParam("appDay") String appDay,
                                                 @RequestParam("bookingType") String bookingType); 
    
    /**
     * 查询紧急救援经销商
     * 
     * @author WangHuicheng
     * @date 2016年12月28日
     * @param userId 用户ID或者是OPENID
     * @param lat 经度
     * @param lng 维度
     * @return 查询的经销商信息
     */
    @RequestMapping(value = { "/maintain/api/v1/sosHelpDealerList" }, method = RequestMethod.GET)
    public List<SosHelpDealerInfoDto> getSosHelpDealerInfo(@RequestParam("userId") String userId,
                                                           @RequestParam("lat") String lat,
                                                           @RequestParam("lng") String lng); 
    
    /**
    * 养修预约经销商，车辆信息查询
    * @author QianKun
    * @date 2017年2月17日
    * @param openId
    * @return
    */
    @RequestMapping(value = "/maintain/api/v1/maintainSel", method = RequestMethod.GET)
    public List<MaintainDto> getMaintainSel(@RequestParam("openId") String openId);


    /**
    * 全部省/市查询
    * 90011001：省,90011002：市
    * @author QianKun
    * @date 2017年2月21日
    * @return
    */
    @RequestMapping(value = "/maintain/api/v1/maintainDealerMap", method = RequestMethod.GET)
    public List<MaintainDealerDto> getMaintainDealerMap(@RequestParam("regionType") String regionType);

    /**
    * 根据省查市
    * @author QianKun
    * @date 2017年3月1日
    * @param parentCode
    * @return
    */
    @RequestMapping(value = "/maintain/api/v1/SelectCityMap", method = RequestMethod.GET)
    public List<MaintainDealerDto> getSelectCityMap(@RequestParam("parentCode") String parentCode);

    /**
    * 养修搜索经销商城市
    * @author QianKun
    * @date 2017年2月21日
    * @return
    */
    @RequestMapping(value = "/maintain/api/v1/maintainSelectCity", method = RequestMethod.GET)
    public List<MaintainDealerDto> getSelectCity(@RequestParam("regionName") String regionName);
    
    /**
    * 查询该城市下的经销商
    * @author QianKun
    * @date 2017年2月21日
    * @param tmAdministrationId
    * @return
    */
    @RequestMapping(value = "/maintain/api/v1/maintainDealer", method = RequestMethod.GET)
    public List<MaintainDealerDto> getMaintainDealer(@RequestParam("regionName") String regionName,@RequestParam("dealerCode") String dealerCode);
    

    /**
    * 搜索某经销商
    * @author QianKun
    * @date 2017年3月1日
    * @param regionCode
    * @param dealerName
    * @return
    */
    @RequestMapping(value = "/maintain/api/v1/searchDealer", method = RequestMethod.GET)
    public List<MaintainDealerDto> getSearchDealer(@RequestParam("regionName") String regionName,@RequestParam("dealerName") String dealerName);
    /**
    * 维修履历列表查询
    * @author QianKun
    * @date 2017年3月7日
    * @param vin
    * @return
    */
    @RequestMapping(value = "/maintenanceorder/api/v1/getMaintenance", method = RequestMethod.GET)
    public List<MaintenanceDto> getMaintenance(@RequestParam("vin") String vin);
 
}
